
/**
 * 
 * 机房布局
 * 
 * 题目描述

小明正在规划一个大型数据中心机房，为了使得机柜上的机器都能正常满负荷工作，需要确保在每个机柜边上至少要有一个电箱。

为了简化题目，假设这个机房是一整排，M表示机柜，I表示间隔，请你返回这整排机柜，至少需要多少个电箱。 如果无解请返回 -1 。

输入描述
cabinets = "MIIM"
其中 M 表示机柜，I 表示间隔

输出描述
2
表示至少需要2个电箱

备注
1 ≤ strlen(cabinets) ≤ 10000
其中 cabinets[i] = 'M' 或者 'I‘
用例
输入	MIIM
输出	2
说明	无
输入	MIM
输出	1
说明	无
输入	M
输出	-1
说明	无
输入	MMM
输出	-1
说明	无
输入	I
输出	0
说明	无

 */

import java.util.Scanner;

/**
  * 
  题目解析
本题其实只要朝一个方向优先放电箱即可，但是通常我们习惯从左向右遍历，因此这里优先将电箱放在机柜的右边。

为什么要将电箱优先放在右边呢？比如下面这个例子：

I M I M
优先将机柜放在红色I位置，则最终只需要一个电箱。如果将机柜放绿色I位置，则最终需要两个电箱。

再比如下面这个例子

M I M I
由于我们是从左往右遍历，因此第一个机柜M，优先将电箱放在它的右边。

但是，如果机柜的右侧放不了电箱呢？比如

I M M I
此时，我们需要看机柜的左侧能不能放，如果能放，则放，不然对应机柜就没有配置电箱了。

如果机柜的左右两侧都放不了电箱呢？

M M I
此时应该直接返回-1。

另外，还有一个重要的点就是：

如果机柜的右侧可以放电箱，比如第 i 个位置是机柜，第 i + 1个位置是间隔，则我们可以将电箱放到第 i + 1个位置上，此时：第 i + 2 个位置是什么还需要关注吗？

比如：

M I M I
上面红色的M还需关注放不放电箱吗？答案是不需要，因为他必然有一个电箱了。

此时我们可以直接跳到i+3位置重新开始上面的判断。

  */
public class 机房布局 {
    
    public static void main(String[] args) {
        
        Scanner sc = new Scanner(System.in);
 
        String str = sc.next();
    
        System.out.println(getResult(str));
  }
 
  public static int getResult(String str) {
    int n = str.length();
 
    // ans记录用了几个电箱
    int ans = 0;
 
    for (int i = 0; i < n; i++) {
      // 如果当前是机柜
      if (str.charAt(i) == 'M') {
        // 则优先将电箱放到该机柜的右边，如果机柜右边有间隔I的话
        if (i + 1 < n && str.charAt(i + 1) == 'I') {
          ans++;
          // 如果放成功了，即当前第 i 个位置是机柜，第i+1个位置是 电箱，那么第i+2个位置无论是机柜还是间隔都无所谓，下次我们直接从第i+3位置开始判断
          i += 2; // 这里 i += 2结合下轮for循环的i++，就是i += 3
        }
        // 如果当前第i位置的机柜右边无法放入电箱，则只能将电箱放到其左边第i-1位置，但是第i-1位置必须是间隔I
        else if (i - 1 >= 0 && str.charAt(i - 1) == 'I') {
          ans++;
        }
        // 如果当前机柜左右都无法放入电箱，则返回-1
        else {
          ans = -1;
          break;
        }
      }
    }
 
    return ans;
  }
}
